diff --git a/system/libraries/Encrypt.php b/system/libraries/Encrypt.php
index 959e2ee..ce5e030 100644
--- a/system/libraries/Encrypt.php
+++ b/system/libraries/Encrypt.php
@@ -104,8 +104,7 @@
 				return $this->encryption_key;
 			}
 
-			$CI =& get_instance();
-			$key = $CI->config->item('encryption_key');
+			$key = config_item('encryption_key');
 
 			if ($key === FALSE)
 			{
diff --git a/tests/codeigniter/libraries/Encrypt_test.php b/tests/codeigniter/libraries/Encrypt_test.php
new file mode 100644
index 0000000..0669901
--- /dev/null
+++ b/tests/codeigniter/libraries/Encrypt_test.php
@@ -0,0 +1,71 @@
+<?php
+
+class Encrypt_test extends CI_TestCase {
+
+  public function set_up()
+  {
+    $obj = new StdClass;
+    $obj->encrypt = new Mock_Libraries_Encrypt();
+    
+    $this->ci_instance($obj);
+    $this->encrypt = $obj->encrypt;
+
+    $this->ci_set_config('encryption_key', "Encryptin'glike@boss!");
+    $this->msg = 'My secret message';
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_encode()
+  {
+    $this->assertNotEquals($this->msg, $this->encrypt->encode($this->msg));
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_decode()
+  {
+    $encoded_msg = $this->encrypt->encode($this->msg);
+    $this->assertEquals($this->msg, $this->encrypt->decode($encoded_msg));
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_optional_key()
+  {
+    $key = 'Ohai!ù0129°03182%HD1892P0';
+    $encoded_msg = $this->encrypt->encode($this->msg, $key);
+    $this->assertEquals($this->msg, $this->encrypt->decode($encoded_msg, $key));
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_default_cipher()
+  {
+    $this->assertEquals('rijndael-256', $this->encrypt->get_cipher());
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_set_cipher()
+  {
+    $this->encrypt->set_cipher(MCRYPT_BLOWFISH);
+    $this->assertEquals('blowfish', $this->encrypt->get_cipher());
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_default_mode()
+  {
+    $this->assertEquals('cbc', $this->encrypt->get_mode());
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_set_mode()
+  {
+    $this->encrypt->set_mode(MCRYPT_MODE_CFB);
+    $this->assertEquals('cfb', $this->encrypt->get_mode());
+  }
+
+}
\ No newline at end of file
diff --git a/tests/mocks/libraries/encrypt.php b/tests/mocks/libraries/encrypt.php
new file mode 100644
index 0000000..a9bbaaf
--- /dev/null
+++ b/tests/mocks/libraries/encrypt.php
@@ -0,0 +1,15 @@
+<?php
+
+class Mock_Libraries_Encrypt extends CI_Encrypt {
+
+  // Overide inaccesible protected method
+  public function __call($method, $params)
+  {
+    if (is_callable(array($this, '_'.$method)))
+    {
+      return call_user_func_array(array($this, '_'.$method), $params);
+    }
+
+    throw new BadMethodCallException('Method '.$method.' was not found');
+  }
+}
\ No newline at end of file
